﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using InterfazPublica;
using CarreraCaballos.Interfaz;
using System.Xml;
using System.Windows.Forms;

namespace CarreraCaballos.Dominio
{
    public class JuegoCarreraCaballos:IJuegos
    {
        private string Nombre = "Carrera de Caballos";

        private IngresoNumeros FormIngresoNumeros;

        public JuegoCarreraCaballos() {

            this.FormIngresoNumeros = new IngresoNumeros();
        }

        public DatosApuesta RealizarApuesta()
        {
            IngresoNumeros IngresoNumeros = (IngresoNumeros)this.CargarFormulario();

            ObjetoApuesta DatosFormulario = IngresoNumeros.ObtenerApuesta();
            DatosApuesta DatosApuesta = new DatosApuesta();

            if (IngresoNumeros.EsValidaApuesta()) //Chequea si es valida la apuesta
            {

                //Hago la llamada al WebService para Generar la apuesta y devuelve un string con los datos
                ServiceReference1.ServicioCarrerasClient cliente = new ServiceReference1.ServicioCarrerasClient();

                Guid retornoApuesta = cliente.RealizarApuesta(DatosFormulario.Hipodromo, DatosFormulario.Fecha, DatosFormulario.Carrera, DatosFormulario.Caballo);

                DatosApuesta.id_apuesta = retornoApuesta.ToString();
                DatosApuesta.monto = DatosFormulario.Monto;
                DatosApuesta.valores = DatosFormulario.Hipodromo + ";" + DatosFormulario.Carrera + ";" + DatosFormulario.Caballo + ";" + DatosFormulario.Monto;
                LimpiarFormulario();
            }
            else 
            {
                DatosApuesta = null;
            }

            return DatosApuesta;
        }

        public double CorrespondePremio(Guid idApuesta)
        {
            ServiceReference1.ServicioCarrerasClient cliente = new ServiceReference1.ServicioCarrerasClient();
            double Premio = cliente.CorrespondePremio(idApuesta);

            return Premio;
        }

        public bool EfectuarPago(Guid idApuesta)
        {
            ServiceReference1.ServicioCarrerasClient cliente = new ServiceReference1.ServicioCarrerasClient();
            cliente.EfectuarPago(idApuesta);
            bool retorno = true;
            return retorno;
        }

        public Form CargarFormulario()
        {
            return this.FormIngresoNumeros;
        }

        public void LimpiarFormulario() 
        {
            FormIngresoNumeros.LimpiarFormulario();
        }

        public int ValidarDatos() 
        {
            int retorno = 0;
            if (!FormIngresoNumeros.EsValidaApuesta()) 
            {
                retorno = 1;
            }
            return retorno;
        }

        public string GetNombre() 
        {
            return this.Nombre;
        }

        public DatosApuesta DatosFormulario()
        {
            DatosApuesta DatosApuesta = new DatosApuesta();
            IngresoNumeros FormIngresoNumeros = (IngresoNumeros)this.CargarFormulario();
            ObjetoApuesta DatosFormulario = FormIngresoNumeros.ObtenerApuesta();
            DatosApuesta.valores = DatosFormulario.Hipodromo + " " + DatosFormulario.Carrera + " " + DatosFormulario.Caballo;

            return DatosApuesta;
        }
    }
}

